package com.acmen.easyapi.generator;

import com.acmen.easyapi.annotation.Param;
import com.acmen.easyapi.model.Dictionary;
import com.acmen.easyapi.provider.DictionaryProvider;
import com.acmen.easyapi.util.StringUtil;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Random;

/**
 * 字典数据生成器
 *
 * @author acmen
 * @date 2023-04-06
 */
@Component
public class DictionaryDataGenerator implements DataGenerator {
    private Random random = new Random();
    @Resource
    public DictionaryProvider dictionaryProvider;

    /**
     * 判断生成器是否适用于指定字段
     *
     * @param field     字段
     * @param param     参数
     * @return          true表示适用于该字段，false表示不适用于该字段
     */
    @Override
    public boolean matches(Field field, Param param) {
        return StringUtil.isNotEmpty(param.dictType());
    }

    /**
     * 生成字段数据
     *
     * @param field     字段
     * @param param     参数
     * @return          生成的数据
     */
    @Override
    public Object generate(Field field, Param param) {
        // 从字典提供者中选择列表
        List<Dictionary> dicts = dictionaryProvider.selectList(param.dictType());

        // 如果字典列表不为空
        if(dicts.isEmpty() == false){
            // 返回随机字典的值
            return dicts.get(random.nextInt(dicts.size())).getValue();
        }

        // 如果字典列表为空，返回null
        return null;

    }

    /**
     * 获取数据生成说明
     *
     * @return  数据生成说明
     */
    @Override
    public String getNote() {
        String note = "字典：" + System.lineSeparator();
        note += "当@ReqParam.dictType'不为空时，随机返回一个字典值'";
        return note;
    }
}
